import cv2
import numpy as np

# 定义全局变量
pt1, pt2 = (0, 0), (0, 0)
is_drawing = False

# 鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
    global pt1, pt2, is_drawing
    
    # 获取传递的原始图像
    image = userdata.copy()  # 克隆原图来绘制动态矩形
    
    if event == cv2.EVENT_LBUTTONDOWN:  # 鼠标左键按下
        pt1 = (x, y)  # 获取鼠标按下时的位置
        is_drawing = True
    elif event == cv2.EVENT_MOUSEMOVE:  # 鼠标移动
        if is_drawing:  # 如果正在绘制
            pt2 = (x, y)  # 更新鼠标位置
            # 在临时图像上绘制矩形
            cv2.rectangle(image, pt1, pt2, (0, 255, 0), 2)
            cv2.imshow("Mouse Event Example", image)  # 显示绘制过程
    elif event == cv2.EVENT_LBUTTONUP:  # 鼠标左键松开
        pt2 = (x, y)  # 获取松开时的位置
        is_drawing = False
        # 在最终图像上绘制矩形
        cv2.rectangle(userdata, pt1, pt2, (0, 255, 0), 2)
        cv2.imshow("Mouse Event Example", userdata)  # 显示最终图像

# 创建一张空白图像
image = np.zeros((600, 800, 3), dtype=np.uint8)

# 创建窗口
cv2.namedWindow("Mouse Event Example")

# 注册鼠标事件回调函数
cv2.setMouseCallback("Mouse Event Example", mouse_callback, image)

# 显示窗口
cv2.imshow("Mouse Event Example", image)

# 等待按键
cv2.waitKey(0)
cv2.destroyAllWindows()
